6.2 单词边界

第一种边界,也是最常用的边界,是由限定符 \b (boundary)指定的单词边界。顾名思义, \b 用来匹配单词的开始或结尾。

6.2.1 匹配单词边界

为了演示 \b 的用法,让我们回到刚才的例子再做一次尝试,但这次我们用上单词边界。

模式 \bcap 将匹配以字符序列"cap"开头的任何一个单词。这里总共找到了 4 个匹配,其他 3 个是以字符序列"cap"开头的其他单词而不是"cap"本身。

6.2.3 匹配单词右边界

下面这个例子还是刚才那段文字,但这次的正则表达式只有一个后缀的 \b 限定符:

模式 cap\b 将匹配以字符序列"cap"结尾的任何一个单词。这里总共找到了 2 个匹配,其他一个是以字符序列"cap"结尾的其他单词而不是"cap"本身。

如果你只想匹配"cap"本身,就必须使用 \bcap\b 做为模式,它才是你需要的正确答案。

注意

\b 匹配且只匹配一个位置,不匹配任何字符。用 \bcap\b 匹配到的字符串长度是 3 (c、a、t),而不是 5;

6.2.4 不匹配单词边界

如果你想表明不匹配一个单词边界,请使用 \B 。在下面的例子里,我们将使用 \B 来查找其前后都有多余空格的连字符:

\B-\B 匹配一个前后都不是单词边界的连字符。"nine-digit"和"pass-key"中的连字符不会与之匹配,但"colors - coded"中的连字符可以与之匹配。

注意

除了用 \b 来匹配单词边界,有些正则表达式引擎还支持另外两个元字符; \< 匹配单词的开头, \> 匹配单词的结尾。不过,虽然这两种字符可以提供粒度更细的控制,但支持它们的正则表达式引擎却并不多见。
经过测试,egrep 命令是支持的,但 Javascript、php、Python 这些编程语言都不支持。

发表评论